home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7578 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.0 KB

  1. Path: keats.ugrad.cs.ubc.ca!not-for-mail
  2. From: c2a192@ugrad.cs.ubc.ca (Kazimir Kylheku)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: pointers
  5. Date: 25 Feb 1996 14:09:05 -0800
  6. Organization: Computer Science, University of B.C., Vancouver, B.C., Canada
  7. Message-ID: <4gqmm1INNmej@keats.ugrad.cs.ubc.ca>
  8. References: <4gqh8g$bo4@news.bu.edu>
  9. NNTP-Posting-Host: keats.ugrad.cs.ubc.ca
  10.  
  11. In article <4gqh8g$bo4@news.bu.edu>, wai yip <lachesis@cs.bu.edu> wrote,
  12. surprisingly on topic for the newsgroup:
  13.  
  14.  >can someone who knows a lot about pointers help me with this
  15.  >
  16.  >int i=3,*p;
  17.  >
  18.  >with the above declaration, what would the bottom lines do?
  19.  
  20.  >*p=&i;
  21.  
  22. (incorrectly) tries to assign the address of integer i to the
  23. storage (of type int) pointed at by (the uninitialized pointer) p.
  24.  
  25. You have comitted two errors. First, you are using a pointer that has not been
  26. initialized to point anywhere. At best, if the above declaration appears
  27. outside of any function so p is initialized for you as  the null pointer.
  28. Secondly, you are assigning incompatible types.
  29.  
  30. What the above does is undefined according to the C standard.
  31.  
  32.  >p=i;
  33.  
  34. Incorrectly assigns an integer to a pointer variable. This is possible with
  35. an appropriate cast if you know what you are doing, but hopelessly makes your
  36. code non-portable. If you need a piece of storage that can alternately hold a
  37. pointer or an integer (but never both at once), you can use a union.
  38.  
  39.  >*p=i;
  40.  
  41. In this case, the types _are_ assignment compatible. You trying to assign the
  42. value of integer i to the integer pointed at by p. Unfortunately, p has not
  43. been initialized to point to an integer variable.
  44.  
  45.  >p=&i;
  46.  
  47. This is the only correct statement so far. This will cause p to hold the
  48. address of integer i.
  49.  
  50.  >please answer me through email because i don't usually read newsgroups.
  51.  
  52. One usually pays for private tutors. I will send you a cc: but I would
  53. recommend that you check the responses on the newsgroup. You might learn a
  54. thing or two from people who are otherwise reluctant to respond in e-mail.
  55. -- 
  56.  
  57.